import { router,addRoutes } from '~/router'
import { getToken } from '~/composables/auth'
import { toast,showFullLoading,hideFullLoading } from '~/composables/util'
import store  from '~/store'


// 全局前置守卫
router.beforeEach(async (to, from, next) =>{
    // 显示加载loading
    showFullLoading()
    // 判断有无token,没有需要登录
    const token = getToken()
    if(!token && to.path != '/login'){
        toast('请先登录', 'error')
        next('/login')
    }
    // 判断是否重复登录
    if(token && to.path == '/login'){
        toast('请勿重复登录', 'error')
        next({ path: from.path ? from.path : '/' })
    }
    // 每次请求都携带user信息
    let hasNewRoutes = false
    // 标志是否获取全局用户信息,只执行一次
    let hasGetInfo = store.state.hasGetInfo
    if(token && !hasGetInfo){
        // 动态添加路由
        let res = await store.dispatch('getInfo')
        // 标志执行完成 
        store.commit('SET_HASGETINFO')
        // console.log(res.data.menus)
        hasNewRoutes = addRoutes(res.data.menus)
    }

    // 赋值标题
    const title = (to.meta.title ? to.meta.title : '') + ' - 商城后台管理系统'
    document.title = title

    // 没问题放行(进行判断,看看是否渲染新路由)
    hasNewRoutes ? next(to.fullPath) : next()
})

// 全局后置钩子
router.afterEach((to, from) => {
  // 隐藏加载loading
  hideFullLoading()
})
